﻿using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using WebApiClientCore.Attributes;
using XUCore.WeChat.Apis;

namespace XUCore.WeChat.Enterprise.Apis.Sns
{
    /// <summary>
    /// https://developer.work.weixin.qq.com/document/path/91023
    /// </summary>
    [HttpHost("https://qyapi.weixin.qq.com/cgi-bin/")]
    public interface IEnterpriseSnsApi : IWeChatApiBase
    {
        /// <summary>
        /// 获取访问用户身份<para/>
        /// 拉取用户信息(需scope为 snsapi_userinfo)<para/>
        /// 如果网页授权作用域为snsapi_userinfo，则此时开发者可以通过access_token和openid拉取用户信息了。
        /// </summary>
        /// <param name="access_token">调用接口凭证</param>
        /// <param name="code">	通过成员授权获取到的code，最大为512字节。每次成员授权带上的code将不一样，code只能使用一次，5分钟未被使用自动过期。</param>
        /// <returns></returns>
        [HttpGet("auth/getuserinfo")]
        Task<EnterpriseUserTicketApiResult> GetUserInfoAsync([Required] string access_token, string code);
        /// <summary>
        /// 获取访问用户身份<para/>
        /// 拉取用户信息(需scope为 snsapi_userinfo)<para/>
        /// 如果网页授权作用域为snsapi_userinfo，则此时开发者可以通过access_token和openid拉取用户信息了。
        /// </summary>
        /// <param name="code">	通过成员授权获取到的code，最大为512字节。每次成员授权带上的code将不一样，code只能使用一次，5分钟未被使用自动过期。</param>
        /// <returns></returns>
        [HttpGet("auth/getuserinfo")]
        Task<EnterpriseUserTicketApiResult> GetUserInfoAsync(string code);

        /// <summary>
        /// 获取访问用户敏感信息（企业员工）<para/>
        /// 注：对于自建应用与代开发应用，敏感字段需要管理员在应用详情里选择，且成员oauth2授权时确认后才返回。敏感字段包括：性别、头像、员工个人二维码、手机、邮箱、企业邮箱、地址。
        /// </summary>
        /// <param name="access_token">调用接口凭证</param>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("auth/getuserdetail")]
        Task<EnterpriseUserDetailApiResult> GetUserDetailAsync([Required] string access_token, [JsonNetContent(CharSet = "utf-8")] UserDetailInput input);

        /// <summary>
        /// 获取访问用户敏感信息（企业员工）<para/>
        /// 注：对于自建应用与代开发应用，敏感字段需要管理员在应用详情里选择，且成员oauth2授权时确认后才返回。敏感字段包括：性别、头像、员工个人二维码、手机、邮箱、企业邮箱、地址。
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("auth/getuserdetail")]
        Task<EnterpriseUserDetailApiResult> GetUserDetailAsync([JsonNetContent(CharSet = "utf-8")] UserDetailInput input);
    }
}
